package com.wuyou.mid;

/**
 * MinMovesToCaptureTheQueen
 *
 * @Date 2024/12/5 10:22
 * @Author 无忧
 */
public class MinMovesToCaptureTheQueen {

    public static void main(String[] args) {
        int a = 4, b = 3, c = 6, d = 1, e = 2, f = 5;

        MinMovesToCaptureTheQueen x = new MinMovesToCaptureTheQueen();

        System.out.println(x.minMovesToCaptureTheQueen(a, b, c, d, e, f));
    }

    public int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {

        return Math.min(captureTheQueenByCar(a, b, c, d, e, f), captureTheQueenByElephant(a, b, c, d, e, f));
    }

    private int captureTheQueenByCar(int a, int b, int c, int d, int e, int f) {
        // 车和皇后在同一条线上
        if (a == e) {
            // 象也在同一条线上
            if (a == c) {
                // 是否在车和皇后之间
                if ((d > b && d < f) || (d < b && d > f)) {
                    // 在边界
                    if (f == 8) {
                        return 3;
                    } else {
                        return 2;
                    }
                } else {
                    // 不在车和皇后之间 直达
                    return 1;
                }
            } else {
                return 1;
            }
        }
        if (b == f) {
            // 象也在同一条线上
            if (b == d) {
                // 是否在车和皇后之间
                if ((c > a && c < e) || (c < a && c > e)) {
                    // 在边界
                    if (e == 8) {
                        return 3;
                    } else {
                        return 2;
                    }
                } else {
                    // 不在车和皇后之间 直达
                    return 1;
                }
            } else {
                return 1;
            }
        }
        return 2;
    }

    private int captureTheQueenByElephant(int a, int b, int c, int d, int e, int f) {
        // 象和皇后在一条对角线上
        if (Math.abs(c - e) == Math.abs(d - f)) {
            // 车也在一条对角线上
            if (Math.abs(c - a) == Math.abs(d - b)) {
                // 象在皇后左上
                if (c < e && b < f) {
                    // 车在皇后和象中间
                    if ((a > c && b > d) && (a < e && b < f)) {
                        return 3;
                    }
                    return 1;
                }
                // 象在皇后左下
                if (c > e && d < f) {
                    // 车在皇后和象中间
                    if ((a < c && b > d) && (a > e && b < f)) {
                        return 3;
                    }
                    return 1;
                }
                // 象在皇后右上
                if (c < e && d > f) {
                    // 车在皇后和象中间
                    if ((a > c && b < d) && (a < e && b > f)) {
                        return 3;
                    }
                    return 1;
                }
                // 象在皇后右下
                if (c > e && d > f) {
                    // 车在皇后和象中间
                    if ((a < c && b < d) && (a > e && b > f)) {
                        return 3;
                    }
                    return 1;
                }
            }
            // 车不在对角线上
            return 1;
        }
        if (c == e) {
            if (Math.abs(c - e) % 2 == 0) {
                return 2;
            }
            return Integer.MAX_VALUE;
        }
        if (d == f) {
            if (Math.abs(d - f) % 2 == 0) {
                return 2;
            }
            return Integer.MAX_VALUE;
        }
        return Integer.MAX_VALUE;
    }
}
